package com.wcx.imitationwechatbilllist.details;

import java.util.List;
import java.util.Objects;

import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DiffUtil;

/**
 * @author: 魏从响
 * @date: 2025/10/24
 * @class: StarlightDiffCallback
 */
public class ListDetailsDiffCallback extends DiffUtil.Callback {
    private final List<ListDetailsBean> mOldList;
    private final List<ListDetailsBean> mNewList;

    public ListDetailsDiffCallback(List<ListDetailsBean> oldList, List<ListDetailsBean> newList) {
        this.mOldList = oldList;
        this.mNewList = newList;
    }

    @Override
    public int getOldListSize() {
        return mOldList == null ? 0 : mOldList.size();
    }

    @Override
    public int getNewListSize() {
        return mNewList == null ? 0 : mNewList.size();
    }

    // 核心方法：判断两个item是否代表同一个实体（例如，通过唯一ID判断）
    @Override
    public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
        ListDetailsBean oldItem = mOldList.get(oldItemPosition);
        ListDetailsBean newItem = mNewList.get(newItemPosition);
        // 通过唯一ID判断是否是同一个条目
        return oldItem.getId() == newItem.getId(); // 请根据你的实际字段名修改
    }

    // 核心方法：如果areItemsTheSame返回true，此方法判断item的内容是否相同
    @Override
    public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
        // 判断条目内容是否相同
        ListDetailsBean oldItem = mOldList.get(oldItemPosition);
        ListDetailsBean newItem = mNewList.get(newItemPosition);
        // 比较所有会影响UI显示的字段
        return Objects.equals(oldItem.getTitle(), newItem.getTitle()) &&
                Objects.equals(oldItem.getTime(), newItem.getTime()) &&
                Objects.equals(oldItem.getAmount(), newItem.getAmount());
    }

    // 可选方法：当内容不同时，提供具体的变更负载(payload)，用于局部刷新
    @Nullable
    @Override
    public Object getChangePayload(int oldItemPosition, int newItemPosition) {
        // 你可以返回一个包含具体变更信息的对象（如Bundle、String）
        // 然后在适配器的convert方法重载中接收并处理它，实现更精确的局部刷新
        return super.getChangePayload(oldItemPosition, newItemPosition);
    }
}

